package java6699.lesson02;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 字符串sort6699
 *
 * @author 周梓希
 * @date 2022/09/05
 */
public class Words6699 extends Application {
    /**
     * 主要
     * 调用Application的launch启动javaFX程序
     *
     * @param args
     */
    public static void main(String[] args) {
        launch(args);
    }

    /**
     * 开始
     * 重写start方法
     *
     * @param primaryStage 初级阶段
     * @throws Exception 异常
     */
    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(getRoot());
        primaryStage.setScene(scene); //指定Scene
        primaryStage.setTitle("提取三个字符的单词");
        primaryStage.show();
    }

    /**
     * 得到根
     * 创建根节点
     *
     * @return {@link Parent}
     */
    private Parent getRoot() {
        Label lblStudent = new Label("212106699周梓希");
        //边框【注意】多行代码的书写规范
        BorderStroke bs = new BorderStroke(Paint.valueOf("#8FBC8F")//边框的颜色
                , BorderStrokeStyle.DOTTED//边框的样式
                , new CornerRadii(10)//边框四个角的圆角
                , new BorderWidths(3));//边框的宽度
        lblStudent.setBorder(new Border(bs));//设置边框
        lblStudent.setPadding(new Insets(10));//设置边距
        //水平排列的两个控件，用于输入
        HBox hText = new HBox(10);
        Label lblText = new Label("输入单词：");
        TextField tfText = new TextField();
        tfText.setPromptText("用空格或逗号分隔的数字串");//文本无内容时显示的提示信息
        hText.getChildren().addAll(lblText, tfText);
        hText.setAlignment(Pos.CENTER_LEFT);//两个控件的对齐方式
        Button button = new Button("提取单词");
        Label lblPrint = new Label();//显示排序结果
        //垂直排列的根节点
        VBox root = new VBox(20);//节点之间的垂直间距20
        //为根节点添加子节点
        root.getChildren().addAll(lblStudent, hText, button, lblPrint);
        root.setPadding(new Insets(20.0));//设置根节点的边距
        root.setAlignment(Pos.TOP_CENTER);//根节点中各节点的对齐方式
        root.setStyle("-fx-font-size:20");//用CSS样式设置容器中所有节点的字体大小

        button.setOnAction(new EventHandler<ActionEvent>() {
            /**
             * 处理字符串数组
             *
             * 1：通过使用button.setOnAction(new EventHandler<ActionEvent>()匿名监听按钮注册
             * 2：获取文本框输入的字符串
             * 3：正则表达式匹配规则,将规则编译成模式对象,通过模式对象获得匹配器对象
             * 4：调用匹配器对象的功能，通过find方法查找有没有满足的字串，再用group方法得到值
             * 5:重新组装成一个字符串，以空格分隔
             * @param event 事件
             */
            @Override
            public void handle(ActionEvent event) {
                String string = tfText.getText();//获取文本框输入的字符串
                String regex = "\\b\\w{3}\\b";//正则表达式匹配规则,将规则编译成模式对象,通过模式对象获得匹配器对象
                Pattern p = Pattern.compile(regex);
                Matcher m = p.matcher(string);
                StringBuilder stringBuilder = new StringBuilder();
                while (m.find()){  //调用匹配器对象的功能，通过find方法查找有没有满足的字串，再用group方法得到值
                    stringBuilder.append(m.group()).append(" ");
                }
                String re = stringBuilder.toString().trim();//重新组装成一个字符串，以空格分隔,去除最后一个空格
                lblPrint.setText(re);
            }
        });
        return root;
    }
}
